iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0
自我挑戰組

非本科系也能懂和該懂得作業系統系列 第 23

Day 23 - Memory allocation

  • 分享至 

  • xImage
  •  

今天我們繼續來看作業系統是如何配置記憶體,實做出來的方法有兩個大種類,一種是連續的(Contiguous),想像記憶體是一條連續的儲存空間,一整個Process所使用到的記憶體也是一大塊連續的空間在那上面,相對而言就會比較單純,反過來說另一種是不連續的(Non-Contiguous),同一個Process的記憶體並不連續,可以中斷散落在各個地方,比較複雜、但也比較節省。

Fragmentation

當我們在配置記憶體給Process時,並不會配得剛剛好,會是以一個單位一個單位的大小在配置空間,那這樣的情況下,記憶體空間一定會有浪費,Fragmentation指的就是被浪費掉的零碎的空間:

  • External fragmentation: 在程式外面的空間夠多,但卻沒有一個夠大去融入下一個Process的狀況,會發生在variable-size allocation的情況下。
  • Internal fragmentation: 切給proess的memory不一定會全部用完,在fixed-size allication的情況下發生。

Contiguous Memory Allocation

Contiguous Memory Allocation可以又可以分為兩種

  • Fixed-partition: 把每個類型的程式所需要的記憶體都先切好存放的位置,一但程式被執行起來要load進記憶體的時候就直接放進去相對應類行的空間。比較舊也相對單純的方法,方便實作且容易理解。
  • Variable-size:以動態的方式去決定Proess要被放進去哪個記憶體空間,程式被執行起來load進記憶體的時候才開始找一個夠大的空間塞進去。比較複雜,但可以節省更多的記憶體空間。

找記憶體空間放進去的方法又分為三種

  • First-fit : 第一個找到空間夠大的就放進去
  • Best-fit : 只找到大小剛好的或者最小卻剛好夠的,但可能會有壞處就是造成了剩下一點小小的別人也無法使用
  • Worst-fit : 找空間最大的記憶體區段來放入

比較多人使用First-fit來搜索記憶體空間,因為Best-fit和Worst-fit在尋找的複雜度是很高的,First-fit相對快速且單純。

Non-Contiguous Memory Allocation

Non-Contiguous的概念下,每個Process所使用的記憶體是凌亂的分布在記憶體的區段之中,其中有一套機制去為每個Process管理其記憶體,其中最關鍵的是有一個Hash Table(Page Table),去儲存logical address 與 physical address的對應關係。

這麼做就會有許多的好處

  • 使用者以為空間是連續的,實際上是non-contiguous的。
  • 透過這樣子的映射關係,可以實作Share memory讓Process交換資料,以及dynmaic linking去使用同一個library。

上一篇
Day 22 - logical address v.s. physical address
下一篇
Day 24 - Paging
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言